/**
 * Project: Utilities <br>
 * Package: org.leumasjaffe.functional.lazy
 */
package org.leumasjaffe.functional.lazy;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;

/**
 * Class org.leumasjaffe.functional.lazy..StateAdvance in file StateAdvance.java <br>
 * 
 * @author leumasjaffe
 * @version Nov 28, 2013
 * Created on: Nov 28, 2013
 * 
 * @param <T>
 * @param <R>
 */
@NonNullByDefault
interface StateAdvance<T, R> {
	
	/**
	 * @param t
	 * @return The new type
	 */
	@Nullable R advanceState(T t);
	
	/**
	 * @param t
	 * @param <O> The end output type
	 * @return The final type from this chain
	 */
	@Nullable <O> O advanceAllStates(T t);
}
